package com.vincent.exam.stack;

import java.util.Stack;

/**
 * 利用两个栈实现队列（一个存正序，一个存反序）
 * 在添加元素的时候将栈2所有元素添加到栈1，最后添加元素，即栈1按照添加的顺序保存所有元素（先进的在下面）
 * 获取的时候只需要将栈1所有元素依次取出放到栈2，即可实现顺序的调转（即添加的元素在最顶部），此时再pop，就能够拿到最先添加的元素，从而实现了类似队列的效果
 */
public class StackQueue {
    private Stack<Integer> stack1 = new Stack<>();
    private Stack<Integer> stack2 = new Stack<>();


    public void push(int val) {
        while (!stack2.isEmpty()) {
            stack1.push(stack2.pop());
        }
        stack1.push(val);
    }

    public int pop() {
        while (!stack1.isEmpty()) {
            stack2.push(stack1.pop());
        }
        return stack2.pop();
    }
}
